import js from '@eslint/js'
import globals from 'globals'
import pluginVue from 'eslint-plugin-vue'
import pluginImport from 'eslint-plugin-import'

import pluginQuasar from '@quasar/app-vite/eslint'
import prettierSkipFormatting from '@vue/eslint-config-prettier/skip-formatting'

export default [
  // 忽略文件配置
  {
    ignores: [
      '/ui-*',
      '/dist',
      '/src-capacitor',
      '/src-cordova',
      '/.quasar',
      '/.husky',
      '/node_modules',
      '/public/static',
      'eslint.config.js',
      '*.min.js',
      '*.cjs'
    ]
  },
  // Quasar 推荐配置
  ...pluginQuasar.configs.recommended(),

  // JavaScript 推荐规则
  js.configs.recommended,

  // Vue 推荐规则
  ...pluginVue.configs['flat/recommended'],

  {
    plugins: {
      vue: pluginVue,
      import: pluginImport
    },

    languageOptions: {
      ecmaVersion: 'latest',
      sourceType: 'module',
      globals: {
        ...globals.browser,
        ...globals.node,
        process: 'readonly'
      }
    },

    rules: {
      // **更严格的规则**
      'generator-star-spacing': ['error', { before: true, after: false }], // async-await 星号前后空格规则
      'arrow-parens': ['error', 'always'], // 箭头函数必须加括号
      'one-var': 'off', // 每个变量声明单独一行
      'no-void': 'off', // 禁止使用 void
      'multiline-ternary': ['error', 'always-multiline'], // 强制多行三元运算符的每个部分在单独的行

      // **Import 相关规则**
      'import/first': 'error', // 所有导入必须放在文件顶部
      'import/named': 'error',
      'import/namespace': 'error',
      'import/default': 'error',
      'import/export': 'error',
      'import/extensions': 'off', // 禁止文件扩展名（例外情况通过 settings 配置）
      // 'import/no-unresolved': ['error', { ignore: ['^@/'] }], // 确保路径可解析，忽略路径别名
      'import/no-extraneous-dependencies': 'off',

      // **代码质量规则**
      'prefer-promise-reject-errors': 'error', // 强制使用 Error 对象作为 Promise 拒绝的原因
      'vue/multi-word-component-names': 'off', // 强制 Vue 组件使用多单词名称
      'vue/attribute-hyphenation': 'off', // 强制在模板中使用驼峰命名法
      'vue/first-attribute-linebreak': 'off', // 强制在模板中换行时使用一致的缩进
      'vue/v-slot-style': 'off', // 强制在模板中使用 v-slot 指令
      'vue/v-on-event-hyphenation': 'off', // 强制在模板中使用驼峰命名法
      'vue/require-default-prop': 'off', // 禁止在 Vue 组件中缺少 default prop
      'vue/no-template-shadow': 'off', // 禁止模板中的变量与父作用域中的变量同名
      'vue/prop-name-casing': 'off', // 强制在模板中使用驼峰命名法
      'vue/v-bind-style': 'off', // 强制在模板中使用 v-bind 指令
      'eol-last': ['error', 'never'], // 文件末尾必须有空行
      'no-unused-vars': ['error', { vars: 'all', args: 'after-used', ignoreRestSiblings: false }], // 禁止未使用的变量
      'no-undef': 'error', // 禁止使用未声明变量
      'object-property-newline': 'off', // 对象内属性是否强制放在单独的行

      // **代码风格规则**
      'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
      'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
      'eqeqeq': ['error', 'always', { null: 'ignore' }], // 强制使用全等
      'quotes': ['error', 'single', { avoidEscape: true }], // 强制使用单引号，除非避免转义
      'indent': ['error', 2, { SwitchCase: 1 }] // 强制缩进为 2 空格
    }
  },

  // Prettier 集成
  prettierSkipFormatting
]